package com.hxzy.common.util;

import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.font.FontRenderContext;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Random;

/**
 * 发送验证码工具类
 * @author:wy
 * Date:2018/12/28
 */
public class ImageUtil {

    /**
     * 随机生成验证码图片，并写入到响应流中
     * @param
     * @return
     */
    public static String drawImg(){
        HttpServletResponse response=RequestContexUtil.getResponse();
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        String code = "";
        for(int i=0; i<4; i++){
            code += randomChar();
        }
        int width = 70;
        int height = 40;
        BufferedImage bi = new BufferedImage(width,height,BufferedImage.TYPE_3BYTE_BGR);
        Font font = new Font("Times New Roman",Font.PLAIN,20);
        Graphics2D g = bi.createGraphics();
        g.setFont(font);
        Color color = new Color(66,2,82);
        g.setColor(color);
        g.setBackground(new Color(226,226,240));
        g.clearRect(0, 0, width, height);
        FontRenderContext context = g.getFontRenderContext();
        Rectangle2D bounds = font.getStringBounds(code, context);
        double x = (width - bounds.getWidth()) / 2;
        double y = (height - bounds.getHeight()) / 2;
        double ascent = bounds.getY();
        double baseY = y - ascent;
        g.drawString(code, (int)x, (int)baseY);
        g.dispose();
        try {
            ImageIO.write(bi, "png", output);
            response.setContentType("image/png;charset=UTF-8");

            ServletOutputStream out = response.getOutputStream();
            output.writeTo(out);
            out.close();

        } catch (IOException e) {

        }
        return code;
    }


    /**
     * 生成验证码的取值范围
     * @return
     */
    public static char randomChar(){
        Random r = new Random();
        String s = "ABCDEFGHJKLMNPRSTUVWXYZ0123456789";
        return s.charAt(r.nextInt(s.length()));
    }
}
